package com.sneaker.shower.socket.repository;

import com.sneaker.shower.socket.feature.SignAble;

import java.util.Collection;
import java.util.function.Predicate;

/**
 * <h1>Repository</h1>
 * <pre>
 * @Description 仓库
 * </pre>
 *
 * @Author lopo
 * @Date 2018/10/17
 */
public interface Repository<T extends SignAble> {
    Integer SIZE=1000;
    /**
     * 保存 单个元素
     * @param t
     */
    T save(T t);

    /**
     * 唯一查找 单个元素
     * @param sign
     * @return
     */
    T get(SignAble sign);

    /**
     * 条件查询
     * @param predicate
     * @return
     */
    Collection<T> peek(Predicate<T> predicate);

    /**
     * 删除
     * @param sign
     */
    void delete(SignAble sign);

    /**
     * 默认 - 修改为删除后新增
     * @param t
     */
    default void update(T t){
        delete(t);
        save(t);
    }
}
